-- @Author: 作者QQ2308873645
-- @Date:   2022-01-02 11:26:40
-- @Last Modified by:   作者QQ381990860
-- @Last Modified time: 2022-07-23 06:58:50
local 场景类_洗炼词条 = class()

local floor = math.floor
local insert = table.insert
local random = 引擎.取随机整数
local mouseb = 引擎.鼠标弹起
local tos = 引擎.取金钱颜色
local zts,tp,zts1,zts2,zts3
local bw = require("gge包围盒")(0,0,100,22)
local box = 引擎.画矩形
local remove = table.remove

function 场景类_洗炼词条:初始化(根)
    self.ID = 838
    self.x = 0
    self.y = 0
    self.xx = 0
    self.yy = 0
    self.注释 = "幻化"
    self.可视 = false
    self.鼠标 = false
    self.焦点 = false
    self.可移动 = true
    self.状态 = true
    tp = 根
    local 格子 = 根._物品格子
    local 资源 = tp.资源
    local 按钮 = tp._按钮
    local 自适应 = tp._自适应
    self.资源组 = {
        [1] = 自适应.创建(0,1,510,320,3,9),

        [3] = 自适应.创建(2,1,580,345,3,9),
        [4] = 按钮.创建(自适应.创建(18,4,16,16,4,3),0,0,4,true,true),

        [11] = 按钮.创建(自适应.创建(11,4,115,20,1,3),0,0,4,true,true,"自动加入强化石"),
        [12] = 按钮.创建(自适应.创建(11,4,55,20,1,3),0,0,4,true,true,"幻化"),
        [13] = 自适应.创建(3,1,35,20,1,3),
        [14] = 按钮.创建(自适应.创建(26,4,25,22,4,3),0,0,4,true,true),
        [15] = 按钮.创建(自适应.创建(25,4,25,22,4,3),0,0,4,true,true),
        [16] = 自适应.创建(3,1,35,20,1,3),
        [17] = 按钮.创建(自适应.创建(26,4,25,22,4,3),0,0,4,true,true),
        [18] = 按钮.创建(自适应.创建(25,4,25,22,4,3),0,0,4,true,true),
        [19] = 自适应.创建(3,1,35,20,1,3),
        [20] = 按钮.创建(自适应.创建(26,4,25,22,4,3),0,0,4,true,true),
        [21] = 按钮.创建(自适应.创建(25,4,25,22,4,3),0,0,4,true,true),
        [22] = 自适应.创建(3,1,35,20,1,3),
        [23] = 按钮.创建(自适应.创建(26,4,25,22,4,3),0,0,4,true,true),
        [24] = 按钮.创建(自适应.创建(25,4,25,22,4,3),0,0,4,true,true),
        [25] = 资源:载入('ZY.dll',"网易WDF动画",2289281503),
        [26] = 资源:载入('ZY.dll',"网易WDF动画",2867857574),
        [27] = 资源:载入('ZY.dll',"网易WDF动画",650195920),
        [28] = 资源:载入('ZY.dll',"网易WDF动画",727733710),
        [29] = 自适应.创建(3,1,40,20,1,3),
        [30] = 按钮.创建(自适应.创建(11,4,33,20,1,3),0,0,4,true,true,"一"),
        [31] = 按钮.创建(自适应.创建(11,4,35,20,1,3),0,0,4,true,true,"二"),
        [32] = 按钮.创建(自适应.创建(11,4,35,20,1,3),0,0,4,true,true,"三"),
        [33] = 按钮.创建(自适应.创建(11,4,35,20,1,3),0,0,4,true,true,"四"),
        [34] = 按钮.创建(自适应.创建(11,4,35,20,1,3),0,0,4,true,true,"五"),
        [35] = 按钮.创建(自适应.创建(11,4,35,20,1,3),0,0,4,true,true,"六"),
        [36] = 按钮.创建(自适应.创建(11,4,35,20,1,3),0,0,4,true,true,"七"),
        [37] = 按钮.创建(自适应.创建(11,4,35,20,1,3),0,0,4,true,true,"八"),
        [38] = 按钮.创建(自适应.创建(11,4,35,20,1,3),0,0,4,true,true,"九"),
        [39] = 按钮.创建(自适应.创建(11,4,35,20,1,3),0,0,4,true,true,"十"),
        [40] = 按钮.创建(自适应.创建(11,4,35,20,1,3),0,0,4,true,true,"11"),
    }
    self.资源组[4]:绑定窗口_(838)
    for i=11,24 do
        if i~=13 and i~=16 and i~=19 and i~=22 then
            self.资源组[i]:绑定窗口_(838)
        end
    end
    for i=30,40 do
        self.资源组[i]:绑定窗口_(838)
    end
    self.物品 = {}

    self.介绍文本 = 根._丰富文本(200,50)
    self.材料 = {}
    self.材料[1] = 格子(self.x+4,self.y,1,"幻化材料")
    self.开始 = 1
    self.结束 = 20
    self.总价 = 0
    self.道具位置 = nil
    self.窗口时间 = 0

    zts =tp.字体表.华康字体
    zts1=tp.字体表.华康字体
    zts2=tp.字体表.进阶字体
    zts3=tp.字体表.进阶字体二

    self.体力消耗=20
    self.消耗强化石=0
    self.需要消耗强化石=0
    self.朱雀石 = 0
    self.白虎石 = 0
    self.青龙石 = 0
    self.玄武石 = 0
    self.最大朱雀石数量 = 0
    self.最大白虎石数量 = 0
    self.最大青龙石数量 = 0
    self.最大玄武石数量 = 0
    self.强化石数量数据 = {朱雀石=0,白虎石=0,青龙石=0,玄武石=0}
    self.成功率=0
    self.新增成功率=0
    self.剩余陨铁=0
    local wp = 0
end



function 场景类_洗炼词条:打开(数据,格子,数据格子)

    if self.可视 then
        self.介绍文本:清空()
        self.随身 = nil
        self.开始 = 1
        self.结束 = 20
        self.可视 = false
    else
        self.格子,self.数据格子=格子,数据格子
        self.介绍文本.文字.大小 = 9
        self.介绍文本.文字高度 = 14
        self.介绍文本.文字宽度 = 6
    --  self.介绍文本:添加文本("#W请选择幻化材料,幻化失败后元身陨铁将会#Y消失#W,强化石可以提高成功率")
        insert(tp.窗口_,self)
        self.刷新数据=数据
        --self.随身 = ss
        self.状态=true
        self.x = (全局游戏宽度/2)-222
        self.y = (全局游戏高度/2)-160
        self.开始 = 1
        self.结束 = 20
        self.物品=数据--:置物品(数据[i].物品)

        self.材料[1]:置物品(nil)
        self.道具位置 = nil
        tp.运行时间 = tp.运行时间 + 1
        self.窗口时间 = tp.运行时间
        self.可视 = true
        self.消耗体活=20
        self.消耗强化石=0
        self.朱雀石 = 0
        self.白虎石 = 0
        self.青龙石 = 0
        self.玄武石 = 0
        self.最大朱雀石数量 = 0
        self.最大白虎石数量 = 0
        self.最大青龙石数量 = 0
        self.最大玄武石数量 = 0
        self.强化石数量数据 = {朱雀石=0,白虎石=0,青龙石=0,玄武石=0}
        self.需要消耗强化石=0
        self.成功率=0
        self.新增成功率=0

        self.剩余陨铁 = 0
        wp = 0
    end
end


function 场景类_洗炼词条:刷新道具(数据,格子,数据格子)
    self.开始 = 1
    self.结束 = 20
    for i=self.开始,self.结束 do
        self.物品[i]:置物品(数据[i])
    end
    self.刷新数据=数据
    self.材料[1]:置物品(nil)
    self.消耗体活=20
    self.消耗强化石=0
    self.需要消耗强化石=0
    self.朱雀石 = 0
    self.白虎石 = 0
    self.青龙石 = 0
    self.玄武石 = 0
    self.最大朱雀石数量 = 0
    self.最大白虎石数量 = 0
    self.最大青龙石数量 = 0
    self.最大玄武石数量 = 0
    self.强化石数量数据 = {朱雀石=0,白虎石=0,青龙石=0,玄武石=0}
    self.成功率=0
    self.新增成功率=0
    self.剩余陨铁=0
    wp = 0
end

local function 需要消耗强化石(物品)
    if 物品.幻化次数==nil then
        物品.幻化次数=0
    end
    if 物品.幻化次数 <= 10 then
        return 0
    elseif 物品.幻化次数 <= 20 then
        return 20
    elseif 物品.幻化次数 <= 30 then
        return 30
    elseif 物品.幻化次数 <= 40 then
        return 40
    elseif 物品.幻化次数 <= 50 then
        return 50
    elseif 物品.幻化次数 <= 60 then
        return 60
    elseif 物品.幻化次数 <= 70 then
        return 70
    elseif 物品.幻化次数 <= 80 then
        return 80
    elseif 物品.幻化次数 <= 90 then
        return 90
    elseif 物品.幻化次数 <= 100 then
        return 100
    else
        return 120
    end
end

function 场景类_洗炼词条:添加强化石(数量)
    local 已选数量 = 0
    local 相差数量 = 数量
    local 返回数据 = {选择位置={},选择数量={}}
    for n=1,20 do
        if self.物品[n].物品 ~= nil and (self.物品[n].物品.名称 == "朱雀石" or self.物品[n].物品.名称 == "白虎石" or self.物品[n].物品.名称 == "青龙石" or self.物品[n].物品.名称 == "玄武石") then
            if self.物品[n].物品.数量 >= 相差数量 and 已选数量 < 数量 then
                if 已选数量==0 then
                    已选数量 = 数量
                    返回数据.选择位置[#返回数据.选择位置+1] = n
                    返回数据.选择数量[#返回数据.选择数量+1] = 数量
                else
                    已选数量 = 数量
                    返回数据.选择位置[#返回数据.选择位置+1] = n
                    返回数据.选择数量[#返回数据.选择数量+1] = 相差数量
                    相差数量 = 0
                end
                break
            elseif self.物品[n].物品.数量 < 相差数量 then
                if 已选数量 == 0 then
                    已选数量 = self.物品[n].物品.数量
                    返回数据.选择位置[#返回数据.选择位置+1] = n
                    返回数据.选择数量[#返回数据.选择数量+1] = self.物品[n].物品.数量
                    相差数量 = 相差数量 - self.物品[n].物品.数量
                else
                    返回数据.选择位置[#返回数据.选择位置+1] = n
                    返回数据.选择数量[#返回数据.选择数量+1] = self.物品[n].物品.数量
                    已选数量 = 已选数量 + self.物品[n].物品.数量
                    相差数量 = 相差数量 - self.物品[n].物品.数量
                end
            end
        end
    end
    return 返回数据
end

function 场景类_洗炼词条:判断强化石数量(数据)
    for n=1,20 do
        if self.物品[n].物品 and
         (self.物品[n].物品.名称 == "朱雀石" or
            self.物品[n].物品.名称 == "白虎石" or
            self.物品[n].物品.名称 == "青龙石" or
            self.物品[n].物品.名称 == "玄武石") then
            if self.物品[n].物品.名称 == "朱雀石" then
                数据.朱雀石 = 数据.朱雀石 + self.物品[n].物品.数量
            elseif self.物品[n].物品.名称 == "白虎石" then
                数据.白虎石 = 数据.白虎石 + self.物品[n].物品.数量
            elseif self.物品[n].物品.名称 == "青龙石" then
                数据.青龙石 = 数据.青龙石 + self.物品[n].物品.数量
            elseif self.物品[n].物品.名称 == "玄武石" then
                数据.玄武石 = 数据.玄武石 + self.物品[n].物品.数量
            end
        end
    end
end

function 场景类_洗炼词条:显示(dt,x,y)
    if tp.窗口.摆摊出售.可视 then
        tp.提示:写入("#Y/摆摊时无法打开洗炼词条。")
        self.介绍文本:清空()
        self:打开()
        return
    end
    if tp.窗口.交易界面.可视 then
        tp.提示:写入("#Y/交易时无法打开洗炼词条。")
        self.介绍文本:清空()
        self:打开()
        return
    end
    if tp.窗口.玩家给予.可视 then
        tp.提示:写入("#Y/给予时无法打开洗炼词条。")
        self.介绍文本:清空()
        self:打开()
        return
    end
    self.强化石数量数据 = {朱雀石=0,白虎石=0,青龙石=0,玄武石=0}
    self:判断强化石数量(self.强化石数量数据)
    local zl = nil
    self.焦点 = false
    self.资源组[4]:更新(x,y)
    self.资源组[11]:更新(x,y)
    self.资源组[12]:更新(x,y)
    for i=30,40 do
      self.资源组[i]:更新(x,y)
    end
    self.资源组[1]:显示(self.x,self.y)
    tp.窗口标题背景_:显示(self.x+self.资源组[1].宽度/2-90,self.y)

    zts1:置颜色(0xFFFFFFFF):显示(self.x+227,self.y+2,"洗炼词条")
    self.资源组[4]:显示(self.x+489,self.y+6)
     tp.单物品格子:显示(self.x+363,self.y+35)
     tp.物品格子背景_:显示(self.x+20,self.y+35)
    if self.资源组[4]:事件判断() then
        self.介绍文本:清空()
        self:打开()
    elseif self.资源组[30]:事件判断() then
        if self.材料[1] == nil or self.材料[1].物品 == nil then
            tp.提示:写入("#Y/还未选择需要洗炼的装备")
        else
             客户端:发送数据(self.格子+self.数据格子,self.材料[1].道具序列+self.数据格子,16,"1")
        end
    elseif self.资源组[31]:事件判断() then
        if self.材料[1] == nil or self.材料[1].物品 == nil then
            tp.提示:写入("#Y/还未选择需要洗炼的装备")
        else
             客户端:发送数据(self.格子+self.数据格子,self.材料[1].道具序列+self.数据格子,16,"2")
        end
    elseif self.资源组[32]:事件判断() then
        if self.材料[1] == nil or self.材料[1].物品 == nil then
            tp.提示:写入("#Y/还未选择需要洗炼的装备")
        else
             客户端:发送数据(self.格子+self.数据格子,self.材料[1].道具序列+self.数据格子,16,"3")
        end
    elseif self.资源组[33]:事件判断() then
        if self.材料[1] == nil or self.材料[1].物品 == nil then
            tp.提示:写入("#Y/还未选择需要洗炼的装备")
        else
             客户端:发送数据(self.格子+self.数据格子,self.材料[1].道具序列+self.数据格子,16,"4")
        end
    elseif self.资源组[34]:事件判断() then
        if self.材料[1] == nil or self.材料[1].物品 == nil then
            tp.提示:写入("#Y/还未选择需要洗炼的装备")
        else
             客户端:发送数据(self.格子+self.数据格子,self.材料[1].道具序列+self.数据格子,16,"5")
        end
    elseif self.资源组[35]:事件判断() then
        if self.材料[1] == nil or self.材料[1].物品 == nil then
            tp.提示:写入("#Y/还未选择需要洗炼的装备")
        else
             客户端:发送数据(self.格子+self.数据格子,self.材料[1].道具序列+self.数据格子,16,"6")
        end
    elseif self.资源组[36]:事件判断() then
        if self.材料[1] == nil or self.材料[1].物品 == nil then
            tp.提示:写入("#Y/还未选择需要洗炼的装备")
        else
             客户端:发送数据(self.格子+self.数据格子,self.材料[1].道具序列+self.数据格子,16,"7")
        end
    elseif self.资源组[37]:事件判断() then
        if self.材料[1] == nil or self.材料[1].物品 == nil then
            tp.提示:写入("#Y/还未选择需要洗炼的装备")
        else
             客户端:发送数据(self.格子+self.数据格子,self.材料[1].道具序列+self.数据格子,16,"8")
        end
    elseif self.资源组[38]:事件判断() then
        if self.材料[1] == nil or self.材料[1].物品 == nil then
            tp.提示:写入("#Y/还未选择需要洗炼的装备")
        else
             客户端:发送数据(self.格子+self.数据格子,self.材料[1].道具序列+self.数据格子,16,"9")
        end
    elseif self.资源组[39]:事件判断() then
        if self.材料[1] == nil or self.材料[1].物品 == nil then
            tp.提示:写入("#Y/还未选择需要洗炼的装备")
        else
             客户端:发送数据(self.格子+self.数据格子,self.材料[1].道具序列+self.数据格子,16,"10")
        end
    elseif self.资源组[40]:事件判断() then
        if self.材料[1] == nil or self.材料[1].物品 == nil then
            tp.提示:写入("#Y/还未选择需要洗炼的装备")
        else
             客户端:发送数据(self.格子+self.数据格子,self.材料[1].道具序列+self.数据格子,16,"11")
        end
    end

    self.介绍文本:显示(self.x+275,self.y+250)

    local is = self.开始 - 1
    for h=1,4 do
        for l=1,5 do
            is = is + 1
            self.物品[is]:置坐标((l-1) * 51 + 20 + self.x,(h-1) * 51 + self.y + 35)
            self.物品[is]:显示(dt,x,y,self.鼠标)
            if self.物品[is].物品~=nil then

                self.物品[is]:显示(dt,x,y,self.鼠标,{"武器","衣服","项链","头盔","鞋子","腰带"})
            end
            if self.物品[is].物品 ~= nil and self.物品[is].焦点 then
                tp.提示:道具行囊(x,y,self.物品[is].物品)
                if self.物品[is].事件  and self.鼠标 then
                    if self.材料[1].物品 == nil then
                        if self.物品[is].物品.鉴定==false then
                            tp.提示:写入("#Y/该装备未鉴定，无法进行操作。")
                            return
                        end
                        if self.物品[is].物品.倩女附加==nil then
                             tp.提示:写入("#Y/只有装备才可以进行洗炼词条，没有词条的物品无法洗炼")
                             return
                        end
                        if self.物品[is].物品.类型~="武器" and self.物品[is].物品.类型~="衣服" and self.物品[is].物品.类型~="头盔" and self.物品[is].物品.类型~="项链"
                         and self.物品[is].物品.类型~="腰带" and self.物品[is].物品.类型~="鞋子" then
                             tp.提示:写入("#Y/只有装备才可以进行洗炼词条，没有词条的物品无法洗炼")
                             return
                        end

                        wp = self.物品[is].物品
                        self.材料[1]:置物品(self.物品[is].物品)
                        self.材料[1].道具序列=is
                        self.道具位置 = is
                        self.物品[is]:置物品(nil)
                    end
                end

            end
            if self.物品[is].焦点 then
                self.焦点 = true
            end
        end
    end
    self.材料[1]:置坐标(self.x+365,self.y+35)
    self.材料[1]:显示(dt,x,y,self.鼠标)
    if self.材料[1].物品 ~= nil and self.材料[1].焦点 then
        tp.提示:道具行囊(x,y,self.材料[1].物品)
        if mouseb(0) and self.鼠标 then
                客户端:发送数据(1,1,13,"1")
                self.材料[1]:置物品(nil)
                self.道具位置=nil

        end
    end
    if self.材料[1].焦点 then
        self.焦点 = true
    end
        zts:置颜色(0xfffff75a)
        zts:显示(self.x+290,self.y+55,"当前装备")
        zts:显示(self.x+20,self.y+260,"请在下方选择要洗炼的词条选项↓")
    if self.材料[1].物品 ~= nil then
        for i=1,#self.材料[1].物品.倩女附加 do
            zts3:显示(self.x+290,self.y+100+((i-1)*20),"["..i.."]")
        end
        for i=1,#self.材料[1].物品.倩女附加 do
            if self.材料[1].物品.倩女附加[i].类型 == "物理伤害" or self.材料[1].物品.倩女附加[i].类型 == "法术基础伤害" then
               zts2:显示(self.x+320,self.y+100+((i-1)*20),self.材料[1].物品.倩女附加[i].类型.." + "..self.材料[1].物品.倩女附加[i].属性.."%")
            elseif self.材料[1].物品.倩女附加[i].类型 == "不能修理" then
               zts2:显示(self.x+320,self.y+100+((i-1)*20),self.材料[1].物品.倩女附加[i].类型.."(基础属性+50%)")
            else
               zts2:显示(self.x+320,self.y+100+((i-1)*20),self.材料[1].物品.倩女附加[i].类型.." + "..self.材料[1].物品.倩女附加[i].属性)
            end
        end
        for i=1,#self.材料[1].物品.倩女附加 do
            self.资源组[i+29]:显示(self.x+20+((i-1)*40),self.y+290)
        end

    end
end

function 场景类_洗炼词条:检查点(x,y)
    local n = false
    if self.可视 and self.资源组[1]:是否选中(x,y)  then
        n  = true
    end
    return n
end

function 场景类_洗炼词条:初始移动(x,y)
    tp.运行时间 = tp.运行时间 + 1
    if not tp.消息栏焦点 then
        self.窗口时间 = tp.运行时间
    end
    if not self.焦点 then
        tp.移动窗口 = true
    end
    if self.可视 and self.鼠标 and  not self.焦点 then
        self.xx = x - self.x
        self.yy = y - self.y
    end
end

function 场景类_洗炼词条:开始移动(x,y)
    if self.可视 and self.鼠标 then
        self.x = x - self.xx
        self.y = y - self.yy
    end
end


return 场景类_洗炼词条